iT邦幫忙

2024 iThome 鐵人賽

DAY 25
1
自我挑戰組

每日挑戰:從零開始的 Python 學習之旅系列 第 25

【Day 25】檔案處理篇 - 續集

  • 分享至 

  • xImage
  •  

Hi 大家好,

今天要開始介紹Python中的檔案處理篇之續集,那我們開始吧!

 繼上一篇使用open()函數來開啟一個文件,並且返回一個文件對象物件。這個函數還可以接收多個參數,其中包括bufferingencodingerrorsnewlines等參數。這些參數的設定,會影響到文件的讀取和寫入的行為。

buffering參數

  • 用來設定緩衝區

    • 0:不使用緩衝,會直接讀取或寫入文件(限制使用二進制方式b"")
    • 1:使用行緩衝(即每行寫入或讀取後會刷新緩衝區)
    • 大於 1:使用指定大小的緩衝區
  • buffering設定為0:

    • 要寫入的字串加上b的字樣當作開頭,以bytes形式表示二進制數據寫入文件
    • open()函數使用wb模式來寫入文件
with open('example.txt', 'wb', buffering=0) as file:
    file.write(b"Some data...\n")
    file.write(b"More data...\n")
# example.txt
Some data...
More data...
  • buffering設定為1:
    • 使用行緩衝模式時,數據會在緩衝區累積到一行結束,也就是遇到換行符號'\n',才會被寫入到文件
    • open()函數使用w模式來寫入緩衝區
    • 不需要轉成bytes形式
with open('example.txt', 'w', buffering=1) as file:
    file.write("Some data...\n")
    file.write("More data...\n")
# example.txt
Some data...
More data...

encoding 和 errors參數

  • 設定encoding參數,用來指定文件使用什麼樣的的編碼格式,如 utf-8、ascii等
  • 設定errors參數,用來指定錯誤處理方式,例如當遇到無法解碼的字符時該怎麼處理

常見的errors參數值有以下幾種:

  • static: 是預設參數值,如果遇到錯誤會觸發UnicodeDecodeError
  • ignore: 如果遇到無法解碼的文字符號,就會選擇忽略
  • replace: 用替代文字符號替換無法解碼的文字符號 (通常使用?)
>>> a = "你好helloこんにちは"
>>> a                                            
'你好helloこんにちは'
>>> a.encode("utf-8").decode("utf-8", "ignore") 
'你好helloこんにちは'
>>> a.encode("utf-8").decode("ascii", "ignore") 
'hello'    <==== 忽略無法解碼的字符
>>> a.encode("utf-8").decode("ascii", "replace") 
'������hello���������������'    <==== 無法解碼的字符使用 ? 來替代
>>>

newlines參數

  • 設定 newlines參數,用來控制文件中行結束字符的處理方式。包含以下幾種字符:
    • None:讓系統自動處理行結束字符
    • '':將每一行結束符標準化空字符
    • '\n':將所有行結束符轉換為 Unix 標準的換行符
    • '\r\n':將所有行結束符轉換為 Windows 標準的換行符
    • '\r':將所有行結束符轉換為 Mac 標準的換行符

將所有行結束符轉換為'\n'

with open('example.txt', 'w', newline='\n') as f:
    f.write("Hello\nWorld\n")
Hello
World    <==== 換下一行
         <==== 換下一行
with open('example.txt', 'w', newline='\n') as f:
    f.write("Hello, World\n")
Hello, World
                <==== 換下一行

那今天就介紹到這裡,我們明天見~


上一篇
【Day 24】檔案處理篇
下一篇
【Day 26】檔案處理篇 - 續集
系列文
每日挑戰:從零開始的 Python 學習之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言